;
DATA SEGMENT
;-接口区-
IO8253A EQU 280H              ;计数器0地址
IO8253B EQU 281H              ;计数器1地址
IO8253C EQU 282H              ;计数器2地址
IO8253D EQU 283H              ;8253控制端口
;-提示信息区-
TS DB 'Please observe the waveform and phenomenon carefully!',0AH,0DH,'$'  
SET0 DB 'Set counter 0',0AH,0DH,'$'
SET1 DB 'Set counter 1',0AH,0DH,'$'
SET2 DB 'Set counter 2',0AH,0DH,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
      ;数据段初始化
      MOV AX,DATA 
      MOV DS,AX
      
      ;输出提示信息
      LEA DX,TS
      MOV AH,9
      INT 21H 

      ;向8253控制端口写36H(0011 0110) 设置(00)计数器0 工作方式 
      ;(11)先读写低字节 (011)方式三 (0)二进制数制
      MOV DX,IO8253D          
      MOV AL,36H              
      OUT DX,AL               
      ;向计数器0写计数器初值0FFFFH
      MOV DX,IO8253A
      MOV AL,0FFH
      OUT DX,AL
      OUT DX,AL
      ;输出提示信息
      LEA DX,SET0
      MOV AH,9
      INT 21H 

      ;向8253控制端口写56H(0101 0110) 设置(01)计数器1 工作方式
      ;(01)只读写低字节 (011)方式三 (0)二进制数制
      MOV DX,IO8253D
      MOV AL,56H
      OUT DX,AL
      ;向计数器1写计数初值8
      MOV DX,IO8253B
      MOV AL,8
      OUT DX,AL
      ;输出提示信息
      LEA DX,SET1
      MOV AH,9
      INT 21H 
            
      ;向8253控制端口写94H(1001 0100) 设置 (10)计数器2 工作方式
      ;(01)只读写低字节 (010)方式二 (0)二进制数制
      MOV DX,IO8253D
      MOV AL,94H
      OUT DX,AL
      ;向计数器2 写入计数初值6
      MOV DX,IO8253C
      MOV AL,6
      OUT DX,AL
      ;输出提示信息
      LEA DX,SET2
      MOV AH,9
      INT 21H 
            
      ;程序退出
      MOV AH,4CH
      INT 21H
CODE ENDS
END START